<?php
/**
 *  芝麻信用SDK Zhima.class.php
 * ============================================================================
 * 版权所有 (C) 2016-2018 西安尊云信息科技有限公司，并保留所有权利。
 * 网站地址:   http://www.zunyunkeji.com
 * ----------------------------------------------------------------------------
 * 许可声明：这是一个开源程序，未经许可不得将本软件的整体或任何部分用于商业用途及再发布。
 * ============================================================================
 * Author: 缘境 (yvsm@zunyunkeji.com) QQ:316430983 
 * Date: 2017年4月21日
*/
require(dirname(__FILE__).'/Zhima/ZmopClient.php');

class Zhima {

	public	$gatewayUrl			=	'https://zmopenapi.zmxy.com.cn/openapi.do';//芝麻信用网关地址
	public	$privateKeyFile		=	"Zhima/rsa_private_key.pem";//商户私钥文件
	public	$zmPublicKeyFile	=	"Zhima/rsa_public_key.pem";//芝麻公钥文件
	public	$charset			=	"UTF-8";//数据编码格式
	public	$appId				=	'1002554';//芝麻分配给商户的 appId
	public  $client;

	public function __construct($config = array()) {
		$this->privateKeyFile = dirname(__FILE__)."/Zhima/rsa_private_key.pem";
		$this->zmPublicKeyFile	=	dirname(__FILE__)."/Zhima/rsa_public_key.pem";
		
		foreach($config as $key=>$vo){
			$this->$key = $vo;
		}
		$this->client = new ZmopClient($this->gatewayUrl,$this->appId,$this->charset,$this->privateKeyFile,$this->zmPublicKeyFile);
	}
	
	//通过授权获取open_id
    public function AuthInfoAuthorize($name,$certNo){
		$request = $this->request("ZhimaAuthInfoAuthorizeRequest");
		$request->setScene("test");
        $request->setChannel("apppc");
        $request->setPlatform("zmop");
        $request->setIdentityType("2");// 必要参数 
        $request->setIdentityParam("{\"name\":\"$name\",\"certType\":\"IDENTITY_CARD\",\"certNo\":\"$certNo\"}");// 必要参数 
        $request->setBizParams("{\"auth_code\":\"M_H5\",\"channelType\":\"app\",\"state\":\"$certNo\"}");// 
        $url = $this->client->generatePageRedirectInvokeUrl($request);
        return $url;
    }
	
	//行业关注名单
    public function CreditWatchlistiiGet($ProductCode,$OpenId){
        $request = $this->request("ZhimaCreditWatchlistiiGetRequest");
        $request->setPlatform("zmop");
        $request->setProductCode($ProductCode);// 必要参数 
        $request->setTransactionId($this->get_microtime_format('YmdHisx'));// 必要参数 
        $request->setOpenId($OpenId);// 必要参数 
        $response = $this->client->execute($request);
        return json_decode(json_encode($response),true);
    }
	
	public function request($name){
		require_once(dirname(__FILE__).'/Zhima/request/'.$name.'.php');
		return new $name();
	}
	
	public function getResult($params,$sign){
		// 判断串中是否有%，有则需要decode
		$params = strstr ( $params, '%' ) ? urldecode ( $params ) : $params;
		$sign = strstr ( $sign, '%' ) ? urldecode ( $sign ) : $sign;
		
		$result = $this->client->decryptAndVerifySign($params, $sign);
		return $result;
	}
	
	/** 获取当前时间戳，精确到毫秒 */
	public function get_microtime_float(){
		list($usec, $sec) = explode(" ", microtime());
		return ((float)$usec + (float)$sec);
	}
	 
	/** 格式化时间戳，精确到毫秒，x代表毫秒 */
	public function get_microtime_format($tag, $time=0){
		if(!$time) $time = $this->get_microtime_float();
		list($usec, $sec) = explode(".", $time);
		$date = date($tag,$usec);
		return str_replace('x', $sec, $date);
	}
	/*
	 * 获取行业关注名单风险标签对照 
	 * 数据来源：https://zmmcportal.zmxy.com.cn/technology/openDoc.htm?relType=OPEN_COMMON_DOC&relInfo=zhima.credit.watchlist.get_CODE_MAPPING&type=OPN_INFO_DOC
	 * @param  string  $code 	风险标签
	 * @param  string  $type 	标签类型（风险信息行业编码：biz_code / 行业名单风险类型：type / 风险编码：code）
	 * @return string
	 * Author: 缘境 (yvsm@zunyunkeji.com) QQ:316430983 
	 * Date: 2017年4月21日 17:13:14
	**/
	public function getRiskLabel($code,$type){
		$label['biz_code']	=	array(
			'AA'	=>	'金融信贷类',
			'AB'	=>	'公检法',
			'AC'	=>	'金融支付类',
			'AD'	=>	'租车行业',
			'AE'	=>	'酒店行业',
			'AF'	=>	'电商行业',
			'AG'	=>	'租房行业',
			'AH'	=>	'运营商',
			'AI'	=>	'保险行业',
			'AA'	=>	'金融信贷类',
			'AA'	=>	'金融信贷类',
			'AA'	=>	'金融信贷类',
			'AA'	=>	'金融信贷类',
		);
		$label['type']	=	array(
			'AA001'	=>	'借贷逾期',
			'AA002'	=>	'套现',
			'AB001'	=>	'被执行人',
			'AC001'	=>	'盗卡者/盗卡者同伙',
			'AC002'	=>	'欺诈者/欺诈同伙',
			'AC003'	=>	'盗用操作/盗用者同伙',
			'AC004'	=>	'盗用支出/盗用者同伙',
			'AC005'	=>	'骗赔',
			'AC007'	=>	'案件库黑名单',
			'AD001'	=>	'逾期未支付',
			'AD002'	=>	'超期未还车',
			'AD003'	=>	'违章未处理',
			'AE001'	=>	'逾期未支付',
			'AF001'	=>	'虚假交易',
			'AF002'	=>	'恶意差评',
			'AF003'	=>	'涉嫌售假',
			'AF004'	=>	'卖家套现',
			'AG001'	=>	'租客房租逾期',
			'AG002'	=>	'租客杂费逾期',
			'AG003'	=>	'租客违约拒赔',
			'AG004'	=>	'租客其它违约',
			'AG005'	=>	'非正常解约',
			'AH001'	=>	'违约欠费',
			'AI003'	=>	'保证保险出险',
		);
		$label['code']	=	array(
			'AA001001'	=>	'逾期1-30天',
			'AA001002'	=>	'逾期31-60天',
			'AA001003'	=>	'逾期61-90天',
			'AA001004'	=>	'逾期91-120天',
			'AA001005'	=>	'逾期121-150天',
			'AA001006'	=>	'逾期151-180天',
			'AA001007'	=>	'逾期180天以上',
			'AA001010'	=>	'逾期1期',
			'AA001011'	=>	'逾期2期',
			'AA001012'	=>	'逾期3期',
			'AA001013'	=>	'逾期4期',
			'AA001014'	=>	'逾期5期',
			'AA001015'	=>	'逾期6期',
			'AA001016'	=>	'逾期6期以上',
			'AA002001'	=>	'严重逾期且套现（通过交易类平台，套现且长期未还款）',
			'AB001001'	=>	'失信被执行人（俗称“老赖名单”）',
			'AB001002'	=>	'被执行人',
			'AC001001 '	=>	'盗卡者/盗卡者同伙（有盗用或者伙同他人盗用借记卡、信用卡行为的人）',
			'AC002001'	=>	'欺诈者/欺诈同伙（有欺诈或者伙同他人进行欺诈行为的人）',
			'AC003001'	=>	'盗用操作/盗用者同伙（有盗用他人账号进行操作（未产生资损）行为的人）',
			'AC004001'	=>	'盗用支出/盗用者同伙（有盗用他人账号进行支付，使他人账号收到资损行为的人）',
			'AC005001'	=>	'骗赔（有骗取支付公司赔偿金行为的人）',
			'AC007001'	=>	'营销作弊名单（在营销活动中有明显作弊行为的人）',
			'AD001001'	=>	'逾期1-7天',
			'AD001002'	=>	'逾期8-14天',
			'AD001003'	=>	'逾期15-30天',
			'AD001004'	=>	'逾期31-60天',
			'AD001005'	=>	'逾期61-90天',
			'AD001006'	=>	'逾期91-120天',
			'AD001007'	=>	'逾期121-150天',
			'AD001008'	=>	'逾期151-180天',
			'AD001009'	=>	'逾期180天以上',
			'AD002001'	=>	'超期1-7天',
			'AD002002'	=>	'超期8-14天',
			'AD002003'	=>	'超期15-30天',
			'AD002004'	=>	'超期31-60天',
			'AD002005'	=>	'超期61-90天',
			'AD002006'	=>	'超期91-120天',
			'AD002007'	=>	'超期121-150天',
			'AD002008'	=>	'超期151-180天',
			'AD002009'	=>	'超期180天以上',
			'AD003001'	=>	'超期1-7天',
			'AD003002'	=>	'超期8-14天',
			'AD003003'	=>	'超期15-30天',
			'AD003004'	=>	'超期31-60天',
			'AD003005'	=>	'超期61-90天',
			'AD003006'	=>	'超期91-120天',
			'AD003007'	=>	'超期121-150天',
			'AD003008'	=>	'超期151-180天',
			'AD003009'	=>	'超期180天以上',
			'AE001001'	=>	'逾期1-7天',
			'AE001002'	=>	'逾期8-14天',
			'AE001003'	=>	'逾期15-30天',
			'AE001004'	=>	'逾期31-60天',
			'AE001005'	=>	'逾期61-90天',
			'AE001006'	=>	'逾期91-120天',
			'AE001007'	=>	'逾期121-150天',
			'AE001008'	=>	'逾期150-180天',
			'AE001009'	=>	'逾期180天以上',
			'AF001001'	=>	'炒信（一般表现为虚假购买商品，使得商品销量虚高误导普通消费者）',
			'AF002001'	=>	'恶意差评（买家对所卖商品进行恶意差评，并以此要求商家给予经济补偿）',
			'AF003001'	=>	'涉嫌售假（涉嫌商家销售假货）',
			'AF004001'	=>	'卖家套现（卖家为客户提供套现的服务）',
			'AG001001'	=>	'租客房租逾期',
			'AG002001'	=>	' 租客杂费逾期 （除房租外，欠缴合同约定应付的款项 ，比如保洁费、水电媒费用等',
			'AG003001'	=>	'租客违约拒赔 （欠缴合同约定的违约金，比如滞纳金、提前解约罚金、财物损毁罚金等）',
			'AG004001'	=>	'改变房屋用途（擅自改变房屋用途，比如民宅改为商用）',
			'AG004002'	=>	'拆改房屋结构 （擅自拆改房屋固定结构，比如墙身等）',
			'AG004003'	=>	'屋内非法活动 （比如在房屋内吸毒）',
			'AG004004'	=>	'扰民被投诉 （比如制造噪音，被邻居投诉）',
			'AG004005'	=>	'擅自转租 （擅自转租整个房屋，或部分房间）',
			'AG005001'	=>	'违约被清退 因违约行为，比如欠缴房租，继而被房东强制清退 ）',
			'AG005002'	=>	'失联被强制解约 （因逃租等行为，房东认为与租客失联强制与租客解约等）',
			'AH001001'	=>	'欠费1-30天 因欠费被停机1-30天',
			'AH001002'	=>	'欠费31-60天 因欠费被停机31-60天',
			'AH001003'	=>	'欠费61-90天 因欠费被停机61-90天',
			'AH001004'	=>	'欠费91天以上 因欠费被停机91天及以上，一般被认定为恶意拆机',
			'AI003001'	=>	'逾期1-30天',
			'AI003002'	=>	'逾期31-60天',
			'AI003003'	=>	'逾期61-90天',
			'AI003004'	=>	'逾期91-120天',
			'AI003005'	=>	'逾期121-150天',
			'AI003006'	=>	'逾期151-180天',
			'AI003007'	=>	'逾期180天以上',
		);
		
		return isset($label[$type][$code])?$label[$type][$code]:'';
	}
}

